gpt4 book ai didi

linux - 带有管道衬里的 awk 命令有些疑问

转载 作者:太空宇宙 更新时间:2023-11-04 09:46:01 26 4
gpt4 key购买 nike

我知道在下面的代码中管道命令会将输出传递给下一个命令。但是我对awk执行的情况有疑问。我的疑问是是每个 awk block 将遍历文件中的所有行,还是逐行遍历。更清楚,正如我假设的那样......

1) 第一个 awk block 将遍历第一行。

2) 如果条件满足则打印该行。 (将其传递到下一个 awk block )

3) 否则什么都不做

4) 下一个 awk block 接收此输出并处理该特定行。

5) 写入文件receipt.tmp

这样处理还是

1) 第一个 awk block 将遍历该文件中的所有行。

2) 将输出传递给下一个 awk block

3) 下一个 awk block 将对传递给第一个 awk block 的输出进行操作。

请帮帮我。我没有运行此命令的选项。提前致谢!

cat > /tmp/pay.dat
grep -v '^TRAILER' /tmp/pay.dat

| \

awk '{
if ((substr($0,145,2) != "CA")
{
print $0
}
}'

|\

awk 'BEGIN{OFS=""} \
{
if (substr($0,38,1) == "X") \
{
print substr($0,1,37), "S", substr($0,39)
} \

else {
print $0
}
}' > /tmp/receipt.tmp

最佳答案

其中之一和/或两者兼而有之。

什么?怎么样?

每个 awk 将遍历给定的行 - 第一个 awk 接收不以“TRAILER”开头的行,第二个接收行首先给它。这些进程并行执行,每个进程都根据需要读取和写入数据。 (尝试读取尚未写入的数据的进程将休眠,直到该数据可用。)

任何副作用发生的顺序是不可预测的,这取决于系统进程调度(包括当前负载)、管道缓冲区大小、awk 执行开销等。

Shellscript 格式化

grep 和第一个 awk 各占一行,不以竖线或反斜杠结尾。那不是管道,它只是一堆命令。如果您使用的是 Bourne shell 或任何源自它的 shell,带引号的字符串不需要反斜杠 - 它们会一直持续到被结束引号打断。

尝试这样的事情:

# This assumes that your data is already in "/tmp/pay.dat".
grep -v "^TRAILER" /tmp/pay.dat |
awk 'your first
awk script' |
awk 'your second
awk script' > /tmp/receipt.tmp

(在 Bourne 派生的 shell 中,以 | 结尾的行会自动继续 - 不需要尾随反斜杠。)

关于linux - 带有管道衬里的 awk 命令有些疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16248191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com