![](/img/trans.png)
[英]Linux shell script read columns into variable and then add the attribute
[英]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.