Bash从文本文件中提取行,并添加包含变量的其他列

时间:2016-08-08 08:03:23

标签: bash text awk

我有2个变量,i和j。对于每个变量组合,都有一个文本文件text.txt,文本以空格分隔的列排列,例如:

string1 43245 7.45
string2 23452 9.34
string3 23652 2.57

我想做以下事情: 制作一个包含所有文本文件的大型文本文件,其中包含在其他列中添加的变量,以及包含文本的其他一些其他列,而不是变量。 E.g。

i = x01
j = y01

然后输出应为:

x01 y01 extrastring string1 43245 7.45
x01 y01 extrastring string2 23452 9.34
x01 y01 extrastring string3 23652 2.57

我尝试过类似的事情:

awk '{$0="'"$i"' '"$j"' extrastring"$0}'1 $i/$j/text.txt >> newtext.txt

这不起作用。

编辑: 我可能需要补充说,这应该在双循环中运行:

for i in x01 x02 x03
do
    for j in y01 y02 y03
    do
    awk '{$0="'"$i"' '"$j"' extrastring"$0}'1 $i/$j/text.txt >> newtext.txt
    done
done

编辑: 我根据SoFan的回答尝试了这个

for i in x01 x02 x03
do
    for j in y01 y02 y03
    do
    cd $i/$j/
    awk -v i="$i" -v j="$j" '{print i,j,"extrastring",$0}' text.txt >> newtext.txt
    done
done

不幸的是它不起作用。该脚本将无法运行。

4 个答案:

答案 0 :(得分:1)

awk -v i="x01" -v j="y01" '{print i,j,"extrastring",$0}' text.txt
x01 y01 extrastring string1 43245 7.45
x01 y01 extrastring string2 23452 9.34
x01 y01 extrastring string3 23652 2.57

或者,如果您已经声明了变量:

i=x01
j=y01
awk -v i="$i" -v j="$j" '{print i,j,"extrastring",$0}' text.txt

答案 1 :(得分:0)

如何使用the read command来阅读文件,并使用cat file.txt | while read line; do echo "$i $j extrastring $line" done > newfile.txt 输出?

这样的东西
/usr/lib/systemd/system/bluetooth.service

答案 2 :(得分:0)

第3版:

for var1 in x01 x02
do 
    for var2 in y01 y02
    do 
        awk '{ print "'"$var1 $var2"'" " extrastring " $0}' $var1/$var2/text.txt
    done
done
x01 y01 extrastring string1 43245 7.45
x01 y01 extrastring string2 23452 9.34
x01 y01 extrastring string3 23652 2.57
x01 y02 extrastring string1 43245 7.45
x01 y02 extrastring string2 23452 9.34
x01 y02 extrastring string3 23652 2.57
x02 y01 extrastring string1 43245 7.45
x02 y01 extrastring string2 23452 9.34
x02 y01 extrastring string3 23652 2.57
x02 y02 extrastring string1 43245 7.45
x02 y02 extrastring string2 23452 9.34
x02 y02 extrastring string3 23652 2.57

但是没有在目录结构下测试它。

答案 3 :(得分:0)

试试这个;

test.sh:

 public string getRandomNumber()
    {
        Random random = new Random(100000);
        string randomNumber = random.Next(999999).ToString("D6");
        return randomNumber;
    }