我实际上是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。可以吗?
答案 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参数扩展。以下是两种可能的方法。
使用选项awk
将shell变量分配给-v
变量:
…|nawk -F, -v field1=$field1 -v field2=$field2 '{print $1",0"$2","field1","field2}'
请注意,field1
和field2
必须出现在"
"
字符串之外。
通过关闭并重新打开'
引号直接插入shell变量:
…|nawk -F, '{print $1",0"$2",'$field1,$field2'"}'
如果我们看第二种方法,就会想到另一种甚至更容易的可能性,它不需要使用read
变量:
…|nawk -F, '{print $1",0"$2",'$(<file.txt)'"}'