запишите много строк с помощью awk

У меня есть данные в тексте в 4 столбцах, но последний столбец является текстом (содержит переменные строки) как как показано ниже

Column1 Column2 Column3 Column4
5678    567     56      hello
1234    123     12      hello there

Я хочу записать или отобразить только 4-е использование столбца awk как: awk '{print $4}' но column4 только показывает первую строку. Как я могу смочь показать текстовое использование awk или любая другая команда форматирования.

Спасибо.

1
задан 18 December 2016 в 19:55

3 ответа

Я думаю, что самым легким путем является, вероятно, соединение tr (для обеспечения существует только одно пространство между каждым столбцом), и cut захватить 4-е и последующие столбцы:

$ cat test.txt | tr -s ' ' | cut -f 4- -d ' '
Column4
hello
hello there

Если Вы уверены, что все столбцы выравниваются с пробелами (не вкладки), то это короче:

$ cut -c 25- < test.txt
Column4
hello
hello there

И обязательное awk решение:

$ awk '{ $1=$2=$3=""; print $0 }' < test.txt
   Column4
   hello
   hello there

Отметьте пробел в начале каждой строки вывода, по сравнению с предыдущими двумя решениями.

0
ответ дан 8 December 2019 в 07:22

Если формат Вашего входного файла - то, что каждый столбец разделяется двумя или больше пробелами, и действительный доступ в столбце 4 никогда не будет иметь больше чем одного пространства подряд, Вы могли использовать следующее решение, где разделитель полей установлен на два или больше пробелов.

awk -F " [ ]+" '{print $4}'

Демонстрационный вывод:

hello hello there

(Отмечают, что заголовок "Column4" был отклонен, потому что существует только одно пространство между каждым из заголовков)

0
ответ дан 8 December 2019 в 07:22

Столбец 4 становится разделенным, когда Вы используете {печатают 4$}, потому что awk интерпретирует и пространство (например, между "привет" и "там") как разделитель, и в этом примере было бы в поле 5.

В зависимости от точно, как Ваш файл отформатирован, существует много возможных ответов (некоторые легче, чем другие).

Если все столбцы разделяются единственным символом табуляции, использовать

awk -F \t '{print $4}' (-F здесь устанавливает зарегистрированный разделитель на единственную вкладку),

Если все столбцы являются разделителем одним или несколькими символами табуляции, использовать

awk -F '[\t]+' '{print $4}' (-F здесь устанавливает разделителя полей на одну или несколько вкладок),

Если первое там столбцы всегда являются постоянным числом символов (скажите 20), затем используйте

awk '{print substr($0, 21)}'

(команда substr просто печатает входную известь от 21-го символа в конец),

или, если ни одно из вышеупомянутого

awk '{for (i=4; i<=NF; i++) printf "%s ", $i print ""}'

(этот цикл печатает все поля от четвертого в конец строки),

0
ответ дан 8 December 2019 в 07:22

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

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