Секция сортировки документов

У меня есть некоторые примеры данных ниже (назовите их test.txt). Я хотел бы разделить этот большой документ на 3 документа, выполнив поиск по первым двум цифрам в 4-м столбце. Я довольно новичок в Linux (Lubuntu 14.04) и изучил 'csplit' и 'awk', но, похоже, не могу снизить синтаксис ни для одного из них. (Я пишу сценарии BASH)

До:

test.txt

12-1-2014   Allow   00:00:00 00:00:00
12-1-2014   Allow   00:00:00 00:00:00   
12-2-2014   Allow   01:00:00 01:00:00
12-10-2014  Deny    01:00:00 01:00:00
12-10-2014  Deny    02:00:00 02:00:00
12-11-2014  Deny    02:00:00 02:00:00

После:

test1.txt

12-1-2014   Allow   00:00:00 00:00:00
12-1-2014   Allow   00:00:00 00:00:00

test2.txt

12-2-2014   Allow   01:00:00 01:00:00
12-10-2014  Deny    01:00:00 01:00:00

test3.txt

12-10-2014  Deny    02:00:00 02:00:00
12-11-2014  Deny    02:00:00 02:00:00
1
задан 6 June 2014 в 23:26

3 ответа

Что-то как этот, возможно:

#!/bin/bash

while read LINE ; do
 [[ -n "`echo $LINE | awk '{print " "$NF}' | grep ' 00:'`" ]] && echo "$LINE" | tee -a test1.txt
 [[ -n "`echo $LINE | awk '{print " "$NF}' | grep ' 01:'`" ]] && echo "$LINE" | tee -a test2.txt
 [[ -n "`echo $LINE | awk '{print " "$NF}' | grep ' 02:'`" ]] && echo "$LINE" | tee -a test3.txt
done < test.txt
<час>

, Где:

while read LINE ; do ; done < FILE

цикл, который читает каждую строку средств ФАЙЛА

[[ -n "`<command>`" ]] &&

: если <command> выводы ненулевая строка длины, то...

echo "these are something"| awk {print $NF} | grep 'thing' 

средства: читайте "они - что-то", сохраните только последний столбец и посмотрите, находится ли "вещь" в нем.

echo "something" | tee -a FILE

средства: Я печатаю "что-то" в ФАЙЛЕ, ничего не перезаписывая и путем создания его, если это еще не существует.

0
ответ дан 6 June 2014 в 23:26

С awk, Вы могли просто сделать

awk '{split($3,a,":"); print > "test"a[1]+1".txt";}' test.txt


В чистом bash Я не уверен лучший способ - хотя Вы могли сделать что-то как

while read -r line; do 
  read -r a b c d <<< "$line"
  printf -v outfile "test%d.txt" $(( ${c%%:*} + 1 ))
  printf "%s\n" "$line" >> "$outfile"
done < test.txt
0
ответ дан 6 June 2014 в 23:26

Попробуйте этот сценарий:

#!/bin/bash
while read line; do 
HOUR=`echo $line | cut -d' ' -f3 | cut -d':' -f1`;
echo $line >> test-$HOUR.txt;
done < test.txt

Для каждой строки в файле, команда cut разделяет строку сначала для space, затем для :. Результат используется в качестве суффикса для файла.

Вывод:

file-00.txt  file-01.txt  file-02.txt  

, что содержащий строку в течение часа 00, 01 и так далее.

0
ответ дан 6 June 2014 в 23:26

Другие вопросы по тегам:

Похожие вопросы: