awkは、3列ではなく1列のデータを持つパイプ区切り値ファイルを開きます。

awkは、3列ではなく1列のデータを持つパイプ区切り値ファイルを開きます。

私はPSV以下のような3列のデータを持つファイルtest1.psvを、awkは、データを 1 つの列に表示します。

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ファイルはタブまたは 1 つ以上のスペースの文字列で区切られていると想定されるため、パイプ区切り値ファイルを使用するには、フィールドが縦棒文字 | で区切られていることを awk に伝えます。

上記の文の最初のリンクから:

(フィールド区切り文字) の値は、awk プログラム内で代入演算子 '=' を使用して変更できます (「代入式」のセクションを参照)。多くの場合、これを行う適切なタイミングは、入力が処理される前の実行開始時です。これにより、最初のレコードが適切な区切り文字で読み取られます。これを行うには、特別な BEGIN パターンを使用します (「特別な BEGIN および END パターン」のセクションを参照)。

例えば、ここではフィールドセパレータの値を設定します。FS) を文字列 "|" に追加します。

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])

関連情報