awk 開啟管道分隔值文件,其中資料位於單列中,而不是三列中

awk 開啟管道分隔值文件,其中資料位於單列中,而不是三列中

我有一個PSV檔案 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 特殊模式部分)。

例如,這裡我們設定(字段分隔符,又名FS) 到字串“|”:

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

答案3

若要僅傳回分隔檔案的特定列,請執行下列命令

cut -d'|' -f1 test1.csv

返回欄位 1 ...將上面變更為 -f2 以傳回第二列...-d parm 在本例中定義分隔符號“|”

建立一個由使用管道 | 連接在一起的許多命令組成的管道是很常見的。所以上面也可以寫成

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

相關內容