簡體   English   中英

Bash 循環遍歷兩列,但只打印第一列,然后在第二次運行所需的命令

[英]Bash to loop over two columns but just print the first columns and on second run the desired command

我有一個 bash 腳本,我想在其中回顯兩個不同的字段並將命令輸出組合到其中以使其成為單行。

我正在從csv文件中讀取兩列,其中$2是項目名稱,另一列$NF是卷名。 我在 for 循環中對每個卷運行命令以獲取數據,但我希望project and $2也與 echo 命令中的每個卷名一起打印所以,我可以知道一個特定的項目有特定的數據。

以下是示例代碼:

#!/bin/bash
#
s_list=$(cat ldap-project-nismap.csv | tr "," "\t"| awk '{print $2, $NF}'| tr -d '"'|sed 1d|head -5)
echo $s_list
for name in $(echo "$s_list");
  do
    echo -n "$2: $NF"
    # do Some action on "$NF"
    locate $NF
done

CSV 數據樣本:

"DC_oregon-DC01",dnpc,"dbc2002:/proj/dbc2002_dnpc_eaeagle_pd2/q",1000,"761.87",76,economy,"eaeagle_pd2","dbc2002_dnpc_eaeagle_pd2"
"DC_oregon-DC01",dnpc,"dbc2002:/proj/dbc2002_dnpc_eaeagle2_7/q",4096,"3536.99",86,scratch,"eaeagle2_7","dbc2002_dnpc_eaeagle2_7"
"DC_oregon-DC01",dnpc,"dbc2002:/proj/dbc2002_dnpc_eaeagle2_6/q",4096,"2976.74",73,scratch,"eaeagle

下面是包含Project NameVolume Names_list列表。

d62320 fxn3008_d62320 d62200 fxn3008_d62200 d62150 fxn3008_d62150 d62110 fxn3008_d62110 d62100 fxn3008_d62100

下面是它的樣子:

Project_name   Volume_name
d62320         fxn3008_d62320 
d62200         fxn3008_d62200 
d62150         fxn3008_d62150 
d62110         fxn3008_d62110 
d62100         fxn3008_d62100

想要什么:

d62320:fxn3008_d62320:/q/volset/fxn3008_d62320

首先,您可以使用單個awk擺脫cat tr sed head

此外, locate命令使用模式; 你的卷名可能不是問題,但至少你需要在它前面加上*/

awk -F, '2 <= NR && NR <= 6 {gsub(/"/,""); print $2,$NF}' file.csv |

while read -r project volume
do
    path=$(locate -n 1 "*/$volume")
    printf '%s:%s:%s\n' "$project" "$volume" "$path"
done

備注:僅當字段數據中沒有嵌入任何逗號、雙引號或換行符時,以這種方式解析 CSV 才有效。

暫無
暫無

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

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