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 ★★ ()
Ответ на: комментарий от 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 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.