2013-03-08 2 views
1

Я учусь Баш и у меня есть файл с линиями 500000, каждый из них имеет эту закономерность:Take длится символы из каждой строки файла

NNNNNNNN NNNNNN C

N = число | C = char A-Z | Первое пространство - это вкладка, второе - регулярное пространство.

Я хочу создать файл с последней частью, начиная со второго столбца чисел (NNNNNN C), используя скрипт bash. Я смог сделать это с помощью:

i=1 
while [ $i -le 500000 ] 
do 
    echo $i 
    sed $i"q;d" $1 | tail -c 9 >> file 
    ((i++)) 
done 

Но это занимает много времени, потому что он записывает каждую строку в файл, один за другим. Как я могу сделать это быстрее?

Благодаря

ответ

1

Используйте cut, который по умолчанию использует вкладки в качестве разделителя.

Для чтения infile и положить поля (-f) 2 года (2-) в file:

cut -f2- infile > file 
+1

Отлично и просто. Я прочитал man-страницу, и я смог сделать это с помощью 'cut -c 10-17 $ 1> $ 2' и используя параметры. Спасибо! – Fdiazreal

+0

Рад, что мой ответ помог вам. Часто самые простые утилиты являются лучшими. – Johnsyweb

2

Вы можете использовать read разделить каждую строку на слова, а затем напечатать те, которые вы хотите:

while read a b c; do 
    echo "$b $c" 
done <input_file> output_file 
+0

Это отлично работает, я думаю, я буду использовать его в другом типе файла. Спасибо! – Fdiazreal

1

да, это займет некоторое время. И хотя вам нравится DIY-дух с помощью bash, эту задачу обычно заботят с помощью инструмента unix, который был разработан для таких задач.

Попробуйте

sed 's/^.*<T>//' file > outFile 

где <T> либо «\ т» или буквальным вкладку голец, в зависимости от версии СЭД.

Это удаляет все до первой вкладки в каждой строке вашего файла, а затем печатает то, что осталось в outFile.

IHTH.

+0

Он будет очень полезен для других файлов, используя RegEx. Спасибо! – Fdiazreal

Смежные вопросы