Shell 脚本问题

Shell 脚本问题

这三个shell命令是什么意思?

# 1
grep "[a-zA-Z]"

# 2
sort -u

# 3
awk -F"," '{if($4 == "2" && $6 == "UPD-LOC" && $7 == "OUT"){ 
            print $11,$12,$18,$23,$11$12 
           }}' $txnfile_fail | sort | tr ' ' ',' >$TEMP_FOLDER/txnFailOut-$1.txt

答案1

不确定为什么这会被降级到被遗忘的程度,但无论如何。

grep “[a-zA-Z]”

grep 是一个使用正则表达式的搜索工具。此特定表达式查找小写字母 (az) 或大写字母 (AZ) 的字符范围(括号内)。因此,它将匹配输入中的单个 ASCII 字母。

笔记由于此行没有指定要读取的文件(或管道),因此它将从 stdin 读取,直到您使用 Ctrl-D 结束它。这意味着您的终端似乎挂起了,即使它正在搜索。

排序-u

对 stdin 进行排序(参见上文注释),然后将相邻的行合并为一行,这意味着仅列出唯一的行

awk -F"," '{if($4 == "2" && $6 == "UPD-LOC" && $7 == "OUT"){ 
            print $11,$12,$18,$23,$11$12 
           }}' $txnfile_fail | sort | tr ' ' ',' >$TEMP_FOLDER/txnFailOut-$1.txt

awk 是一个用于操作文本文件的有用工具,其复杂性和麻烦程度介于 bash+grep 和 perl 之间。这是利用 awk 的功能读取列,

对变量 $txnfile_fail 中指定的文件运行 awk 工具。该-F标志用于字段分隔符,因此它是一个逗号分隔的输入文件。检查第 4 个字段是否为 2,第 6 个字段是否为“UPD-LOC”,第 7 个字段是否为“OUT”。如果是,则转储出字段 11、12、18、11、12。然后对输出进行排序,将空格转换为逗号,然后转储到文件 $TEMP_FOLDER/txnFailOut-$1.txt。

因此,它会过滤 csv 文件,仅打印某些列,对过滤后的输入进行排序并转储到不同的文件。奇怪的是,它可以使用空格作为输出分隔符,然后将空格转换为不同的字符。您可以使用 awk 语句“OFS=,”在 awk 中设置分隔符。

答案2

列出的每个项目的第一个单词是命令名称。

您可以使用每个命令的手册来更好地了解它们的作用。例如,man grep调出命令的手册grep

命令名称后面列出的文本是传递给命令的参数,这些参数会进一步指示命令应该做什么。您可以通过该man页面了解有关每个命令的各种参数的更多信息。这应该对前两个命令有帮助。

显示的命令awk有点棘手,但有一个更详尽的用户指南可在线获取。

相关内容