在命令中传递单词

时间:2016-12-17 08:02:59

标签: linux bash shell arguments

我实际上是shell脚本的新手。我有一个写在662,2016-12-31的file.txt。

示例:#cat file.txt

662,2016-12-31

我有另一个带命令的script.sh文件 ' {print $ 2",0" $ 1",field1,field2}'

示例:#cat script.sh

' {print $ 2",0" $ 1",field1,field2}'

我想在field1打印662,在field2打印2016-12-31。可以吗?

3 个答案:

答案 0 :(得分:0)

使用awk命令可以轻松实现。您可以查看以下简单的shell脚本,

#!/bin/sh

InputData=`cat file.txt`

field1=`echo $InputData | awk -F "," '{print $1}'`
field2=`echo $InputData | awk -F "," '{print $2}'`

echo "field1=$field1"
echo "field2=$field2"

输出:

field1=662
field2=2016-12-31

答案 1 :(得分:0)

您可以使用带有分隔符的cut命令获取field1和field2的值“,”

field1=`cat file.txt | cut -d "," -f1`
field2=`cat file.txt | cut -d "," -f2`

'{print $2",0"$1",$field1,$field2}'

答案 2 :(得分:0)

  

“……| nawk -F,'{print $ 1”,0“ $ 2”,field1,field2“}'> install_offer2.csv”实际上这是完整命令。我只想在field1处打印662,在field2处打印2016-12-31。因此,每当我更改file.txt时,该命令也会更改,因为它总是从file.txt中获取参数。

最简单的部分是将文件中的字段读入变量:

IFS=, read field1 field2 <file.txt

不是很容易,但是几乎很容易的部分是将这些变量的值插入nawk命令中,因为它位于单引号内,因此不会进行任何shell参数扩展。以下是两种可能的方法。

  1. 使用选项awk将shell变量分配给-v变量:

    …|nawk -F, -v field1=$field1 -v field2=$field2 '{print $1",0"$2","field1","field2}'
    

    请注意,field1field2必须出现在" "字符串之外。

  2. 通过关闭并重新打开'引号直接插入shell变量:

    …|nawk -F, '{print $1",0"$2",'$field1,$field2'"}'
    

如果我们看第二种方法,就会想到另一种甚至更容易的可能性,它不需要使用read变量:

…|nawk -F, '{print $1",0"$2",'$(<file.txt)'"}'