【问题标题】:Using bash and awk to print to a specific column in a new document使用 bash 和 awk 打印到新文档中的特定列
【发布时间】:2013-10-26 03:05:04
【问题描述】:

我正在尝试将 bash 和 awk 与嵌套的 for 循环一起使用,以将数据打印到彼此相邻的列中。 到目前为止,这就是我所拥有的:

for k in {1..147..3}
do
for i in "52" "64" "60" "70" "74"
do
        awk -v x="${i}" -F, 'match ($0,x) { print $k }' all.csv > final.csv
done
done
echo "script has run"

我需要将信息打印到新文件的 k 列中。但是这不起作用。 所以csv文件中的数据是这样的:

52,9/05,6109
52,9/06,6119
64,9/05,7382
64,9/06,7392
64,9/07,3382
60,9/06,3829
...

我想要这样的输出:

52,9/05,6109,64,9/05,7382,60,9/06,3829
52,9/06,6119,64,9/06,7392
,,,64,9/07,3382

基本上第一列都是52s,第四列是64s,第七列是60s

【问题讨论】:

    标签: bash variables loops awk


    【解决方案1】:

    printf "%s,",$k代替print $k

    printf 是许多语言通用的打印格式化函数。 %s 告诉它第一个参数应该是一个字符串。

    请注意,awk 不会从 shell 中获取 $k,因此您需要添加 -v k=$k

    【讨论】:

    • 这给了我一个错误..但是你能解释一下这些术语的含义吗?我认为通过解释可能会帮助我更好地理解它
    • awk: (FILENAME=all.csv FNR=21910) 致命:没有足够的参数来满足格式字符串“%s”
    • 这意味着要么您忘记在格式后添加$k,要么您的文件没有该列并且您的 awk 实现不喜欢打印未定义的变量。
    • 我将所有这些打印到一个没有列的新文件中。 awk 函数可以在新文件中创建列吗?
    • 输入文件 (all.csv) 是最重要的文件。确保您对格式字符串中的每个 % 都有一个 printf 参数。如果你已经这样做了,也许检查一下NF > k,如果是,就打印一个单独的,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多