awk открывает файл с разделенными каналом значениями, содержащий данные в одном столбце, а не в трех

awk открывает файл с разделенными каналом значениями, содержащий данные в одном столбце, а не в трех

у меня естьПСВфайл test1.psv с тремя столбцами данных, как показано ниже, при открытии с помощьюawk, отображает данные в одном столбце.

xxxx|0001|rose  
yyyy|8768|lotus  
fgsh|6543|lilly  

на самом деле это должен быть файл с разделителями "|" и 3 столбцами, но когда я print $1, все столбцы появляются в качестве первого столбца, как показано ниже

cat test1.psv |awk '{print $1}'

выходы:

xxxx|0001|rose
yyyy|8768|lotus
fgsh|6543|lilly

но результат должен быть:

xxxx
yyyy
fgsh

если мы print $2, результат должен быть:

0001
8768
6543

решение1

Вам необходимо установить разделитель полей следующим |образом -F(также вам не нужно cat):

$ awk -F '|' '{print $1}' test1.csv
xxxx
yyyy
fgsh
$ awk -F '|' '{print $2}' test1.csv
0001
8768
6543
$ awk -F '|' '{print $3}' test1.csv
rose
lotus
lillyw

(Обратите внимание, что $здесь естьприглашение командной строки используется для обозначения начала новой строки, а не как часть команды).

-FопределяетсяPOSIXи должен быть портативным.

решение2

awkбудет предполагать, что файл разделен табуляцией или строкой из одного или нескольких пробелов, поэтому для использования файла значений, разделенных конвейером, мы сообщаем awk, что наши поля разделены символом вертикальной черты |.

Из первой ссылки в предложении выше:

Значение (разделитель полей) можно изменить в программе awk с помощью оператора присваивания '=' (см. раздел Выражения присваивания). Часто это нужно делать в начале выполнения, до того, как будет обработан какой-либо ввод, чтобы самая первая запись была прочитана с правильным разделителем. Для этого используйте специальный шаблон BEGIN (см. раздел Специальные шаблоны BEGIN и END).

Например, здесь мы задаем значение (разделитель полей, он жеФС) к строке "|":

cat test1.psv | awk 'BEGIN { FS = "|" } ; { print $1 }'

решение3

чтобы просто вернуть только определенный столбец файла с разделителями, выполните эту команду

cut -d'|' -f1 test1.csv

чтобы вернуть поле 1 ... измените указанное выше на -f2, чтобы вернуть 2-й столбец ... параметр -d определяет символ-разделитель, в данном случае '|'

обычно создают конвейер из многих команд, связанных вместе с помощью конвейера | поэтому выше также можно написать

cat test1.csv | cut -d'|' -f1

решение4

awk -F "|" '{print $1}' p.txt ===============> To get first column

awk -F "|" '{print $2}' p.txt===================> To get second column




python

Below python code drives first and second column

#!/usr/bin/python

k=open('p.txt','r')
for i in k:
    print " ".join(i.split("|")[0:2])

Связанный контент