Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 如何在ksh中获取子字符串_Unix_Awk_Substring_Ksh_Cut - Fatal编程技术网

Unix 如何在ksh中获取子字符串

Unix 如何在ksh中获取子字符串,unix,awk,substring,ksh,cut,Unix,Awk,Substring,Ksh,Cut,我有一个名为“output.txt”的文件,其数据格式为: 400949703|2000025967912|20130614010652|20130614131543 355949737|2144050263|20120407100407|20120407101307 355499738|2144500262|20110911010901|20110911135601 我正在执行一个awk命令,如下所示: awk -F"|" '{num1="`echo $3| cut -c1-8`"; pri

我有一个名为“output.txt”的文件,其数据格式为:

400949703|2000025967912|20130614010652|20130614131543
355949737|2144050263|20120407100407|20120407101307
355499738|2144500262|20110911010901|20110911135601
我正在执行一个awk命令,如下所示:

awk -F"|" '{num1="`echo $3| cut -c1-8`"; print $num1}' output.txt
我的预期产出是:

20130614
20120407
20110911
但我得到的输出实际上是输入

400949703|2000025967912|20130614010652|20130614131543
355949737|2144050263|20120407100407|20120407101307
355499738|2144500262|20110911010901|20110911135601
找不到原因。我的任务是比较第3列和第4列中的前8个字符。但是只在这一部分上结巴了


专家们,请帮助我找到我所缺少的地方。

您将bash与awk混合在一起,一个工具就足够了:

awk -F\| 'a=substr($3, 1, 8){if(a==substr($4, 1, 8)){print a}}' output.txt

获取第3列和第4列的子字符串,比较并打印是否正确。

使用
cut
两次怎么样

$ cut -d'|' -f4 file | cut -c-8
20130614
20120407
20110911
  • 首先根据
    |
    分隔符获取第四个字段
  • 第二步是获取前8个字符(注意
    cut-c-8
    cut-c1-8
    相同)