簡體   English   中英

Linux SHELL腳本,讀取每一行的不同列數

[英]Linux SHELL script, read each row for different number of columns

我有文件和例如值:

1 value1.1 value1.2
2 value2.1
3 value3.1 value3.2 value3.3

我需要使用shell腳本讀取值,但每行的列數不同! 我知道如果我想讀第二列,我會這樣做(對於行號作為輸入參數)

$ awk -v key=1 '$1 == key { print $2 }' input.txt
value1.1

但正如我所提到的,每列的列數不同。 如何使這個閱讀動態?

例如:如果輸入參數為1,則表示我應該從第一行讀取列,因此輸出應為

value1.1 value1.2

如果輸入參數是2,則意味着我應該從第二行讀取列,因此輸出應該是

value2.1

如果輸入參數是3,則意味着我應該從第三行讀取列,因此輸出應該是

value3.1 value3.2 value3.2

要點是列數不是靜態的,我應該從該特定行讀取列直到行的結尾。

謝謝

然后你可以簡單地說:

awk -v key=1 'NR==key' input.txt

更新

如果要使用列數據進行處理,可以采用多種方法。
使用awk你可以說:

awk -v key=3 'NR==key {
    for (i=1; i<=NF; i++)
        printf "column %d = %s\n", i, $i
}' input.txt

哪個輸出:

column 1 = value3.1
column 2 = value3.2
column 3 = value3.2

在awk中,您可以直接$i 間接訪問每個列值$1$2$3 ,其中變量i包含1,2,3。

如果您更喜歡使用bash,請嘗試以下方法:

line=$(awk -v key=3 'NR==key' input.txt)
set -- $line    # split into columns

for ((i=1; i<=$#; i++)); do
    echo column $i = ${!i}
done

它輸出相同的結果。
在bash中, 間接訪問有點復雜,你需要說${!i} ,其中i是變量名。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM