AWK:如何在不覆盖要打印的第一个参数的情况下按索引和列进行剪切和重新排列

时间:2018-06-19 14:55:22

标签: linux string bash awk cat

我试图逐行读取文件,对每行进行字符串操作,然后将输出写入文件;

cat fileName | awk '{...}' >> fileOut

我要完成的特定字符串操作是,对于每一行,首先在某个索引后打印所有内容,对于每一行都相同,例如X,不包括换行符,然后是“:”,然后是第一列,尽管我也可以根据需要通过子字符串来完成此操作。我发现了一些示例,这些示例结合了列值的变量声明,将其设置为零,子字符串的变量声明(有或没有终止于最后一个索引),以及将它们与print / f结合在一起的方法,但是在所有示例中,都使用了子字符串和列索引是互斥的。

在示例中,每次尝试用一个替代另一个时,第一列的内容似乎总是简单地替换子字符串的内容。由于我尝试了许多方法,因此我将提供最新的尝试;

假设输入的一行是"1234 abcd efgh IJKL mnop",我想从索引10开始打印所有内容,然后依次打印" : "和第1列,我的命令如下所示:

cat fileName | awk '{printf(“%s : %s/n”,substr($0,10),$1)}' >> fileOut
cat fileName | awk '{A=substr($0,10);B=$1;printf(“%s : %s/n”,A,B)}' >> fileOut
cat fileName | awk '{print substr($0,10)” : “$1}' >> fileOut

但是,到目前为止,在每种情况下,返回的字符串都以" : "开头,之后是$1的内容,然后是substr,该字符的开头是第一个一致的字符,例如, / p>

" : 1234L mnop",当我期望"efgh IJKL mnop : 1234"

为什么使用列覆盖substr的返回?

0 个答案:

没有答案