LINUX.ORG.RU

Выдрать данные из файла

 ,


0

1

Лор, очень нужна помощь! Есть файл с 4-мя столбцами чисел. Столбцы разделены произвольным количеством пробелов. Нужно каждый столбец записать в отдельный файл. Как это сделать bash + sed?

:3

cat $FILE | sed 's/\([0-9]\+\) \+[0-9]\+ \+[0-9]\+ \+[0-9]\+/\1/' >$FILE_1
cat $FILE | sed 's/[0-9]\+ \+\([0-9]\+\) \+[0-9]\+ \+[0-9]\+/\1/' >$FILE_2
cat $FILE | sed 's/[0-9]\+ \+[0-9]\+ \+\([0-9]\+\) \+[0-9]\+/\1/' >$FILE_3
cat $FILE | sed 's/[0-9]\+ \+[0-9]\+ \+[0-9]\+ \+\([0-9]\+\)/\1/' >$FILE_4
schizoid ★★★
()
sed 's/ \+/\t/g' | cut -f N > fieldN.txt

для всех N

drBatty ★★
()

bash + sed

sed принципиален? Если нет, то

for i in {1..4} ; do awk '{ print $'$i' }' /path/to/file > $i.txt ; done

dexpl ★★★★★
()
Ответ на: комментарий от dexpl

Ваш вариант?

Бери любой:

for i in {1..4} ; do awk -v x=$i '{ print $x }' /path/to/file > $i.txt ; done
for i in {1..4} ; do awk '{ print $ENVIRON[«i»] }' /path/to/file > $i.txt ; done

kim-roader ★★
()
Ответ на: комментарий от kim-roader

[code]for i in {1..4} ; do awk -v x=$i '{ print $x }' /path/to/file > $i.txt ; done[/code]Круто :)
[code]for i in {1..4} ; do awk '{ print $ENVIRON[«i»] }' /path/to/file > $i.txt ; done[/code]$ у ENVIRON не нужен, и по-хорошему, не awk, а gawk, но тоже круто

dexpl ★★★★★
()
Ответ на: комментарий от dexpl

$ у ENVIRON не нужен

Нужен. Строка $VARIABLE_NAME (В данном случае VARIABLE_NAME == ENVIRON[«i»]) интерпретируется так: вместо VARIABLE_NAME подставляется значение этой переменной, преобразуется в целое число, после чего $NUMBER интерпретируется как обычно, то есть заменяется на значение поля с номером NUMBER. Таким же образом, например, работает идиома «$NF», состоящая из доллара и переменной содержащей количество полей в текущей строке, которая разворачивается в значение последнего поля.

по-хорошему, не awk, а gawk, но тоже круто

Именно awk (то есть POSIX awk, а не traditional UNIX awk): http://pubs.opengroup.org/onlinepubs/009695399/utilities/awk.html

all environment variables shall be visible via the awk variable ENVIRON

kim-roader ★★
()
Ответ на: комментарий от kim-roader

Согласен. Про доллар ляпнул не подумавши, а насчет POSIX awk благодарю за ликбез — искренне считал ENVIRON расширением GNU

dexpl ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.