我有一个场景,其中有一个带有控制编号和表名的文件,这里有一个例子:
1145|report_product|N|N|
1156|property_report|N|N
我需要将控制号传递为1156,并且必须将表名获取为PR。一旦我将表名获得为PR,我就需要在上面添加一些文本。
请帮助
假设控制文件为:
# cat controlfile.txt
1145|report_product|N|N
1156|property_report|N|N
要细化某些行,可以使用:
grep 1156 controlfile.txt
如果需要,您可以将其保存到一个变量中:result=$(grep1156 file.txt(
假设您需要在这一行添加一些附加内容。。。。你可以使用:
sed '/^1156/s/$/ 123/' controlfile.txt
这个例子将添加";123〃;在以1156 开始的行的末尾
如果需要,请添加更多细节,如您想要的输出或其他任何内容,以帮助我们更好地了解您的需求。
您需要分两个阶段工作:
- 您需要找到包含1156的行
- 你需要从那条线上得到信息
为了找到行(如Juranir所示(,您可以使用grep
:
Prompt> grep "1156" control.txt
1156|property_report|N|N
为了从该行获取信息,您需要根据垂直行(通常称为"管道"字符(获取第二列,对此有不同的方法。我给你两个:
cut
方法:您可以将一行切割成不同的部分,并取一个字符、一个字节、一列。。。。在这种情况下,这就是您所需要的:grep "1156" control.txt | cut -d '|' -f 2 -d '|' : use the vertical line as a column separator -f 2 : show the second field (column)
CCD_ 3方法:CCD_;文本修饰符";具有多种功能(显示文本的部分,执行基本计算,…(。对于这种情况,它可以如下使用:
grep "1156" control.txt | awk -F '|' '{print $2}' -F '|' : use the vertical line as a column separator '{print $2}' : the awk script for showing the second field.
哦,顺便说一下,我已经编辑了你的问题。您可以按下编辑按钮来了解我是如何做到这一点的:-(
只获取由下划线分隔的第一个字母:
grep "1156" control.txt | awk -F '|' '{print $2}' | awk -F '_' '{print substr($1,1,1) substr($2,1,1)}'