У меня есть данные в тексте в 4 столбцах, но последний столбец является текстом (содержит переменные строки) как как показано ниже
Column1 Column2 Column3 Column4
5678 567 56 hello
1234 123 12 hello there
Я хочу записать или отобразить только 4-е использование столбца awk
как: awk '{print $4}'
но column4 только показывает первую строку. Как я могу смочь показать текстовое использование awk
или любая другая команда форматирования.
Спасибо.
Я думаю, что самым легким путем является, вероятно, соединение 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
Отметьте пробел в начале каждой строки вывода, по сравнению с предыдущими двумя решениями.
Если формат Вашего входного файла - то, что каждый столбец разделяется двумя или больше пробелами, и действительный доступ в столбце 4 никогда не будет иметь больше чем одного пространства подряд, Вы могли использовать следующее решение, где разделитель полей установлен на два или больше пробелов.
awk -F " [ ]+" '{print $4}'
Демонстрационный вывод:
hello
hello there
(Отмечают, что заголовок "Column4" был отклонен, потому что существует только одно пространство между каждым из заголовков)
Столбец 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 ""}'
(этот цикл печатает все поля от четвертого в конец строки),