shell - 如何使用 awk 在循环中打印列?

标签 shell awk ksh

我从某个命令输出了多列文本,并且希望一次打印一列,例如:

#!/usr/bin/ksh

typeset -i i=0
while [[ $i -lt 5 ]]; do
  <command 1> |awk '{print $i}' |<command 2>
  i=$i+1
done

我知道 $i 不是在 awk 中指定第 i 列的方法。这里的正确用法是什么?

假设 command 1 的输出类似于:
"abc" "def" "ghi" "jkm"
"123" "456" "789" "0ab"
"erf" "fad" "dae" "kjh"

该值不一定是 3 个字符长。这里只是举例。

我想依次将第一列到第四列,以供 command 2 使用。

最佳答案

您在 $i 之间感到困惑shell 变量和 $i awk中的第i个字段.您需要将shell变量的值传递给awk在使用中 -v :

#!/bin/bash

for i in {1..5}; do 
    <command1> | awk -v i="$i" '{print $i}' | <command2>
done

这会让 command2处理 command1 的输出中的每一列分别地。

关于shell - 如何使用 awk 在循环中打印列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16279933/

相关文章:

linux - 使用 awk 命令遍历文本文件并递增脚本的早上、下午和晚上部分的计数器

python - 按字符串变量对列重新排序

awk - 第三行的总和并相应地划分行

shell - ksh 自动完成功能和之前的命令一起使用

linux - 在脚本中使用 uname -n 与 VAR=$(uname -n) 的优点/缺点?

php - 从终端验证启用 SSL 的网站

linux - 从 Linux 命令行中,查找字符串出现的行数

nested - ksh93 中的 %(pattern-pair(s))?

linux - 根据内容将巨大的哈希文件分成一个文件(shell脚本)

linux - 将输出存储到 shell 变量中