在脚本中同时使用 cut 和 sed 命令

在脚本中同时使用 cut 和 sed 命令

我在 Bash 脚本中有以下代码:

#!/bin/bash

# gives summary of my buyings in the report.txt file

echo Here is the summary of your purchases:
echo =========================================
echo

# /dev/stdin is the standard input, i.e. the file
cat /dev/stdin | cut -d ' ' --fields=2,3 | sort && sed -n '2 p' /dev/stdin 

所以我想要的是打印第二个和第三个字段,并使用空格作为分隔符,并使用 打印report.txt 的第二行sed。那么我该怎么做呢?

更新:

我的report.txt的内容是:

Jakaria Books 5
Sakib Khata 3
Afzal Pen 12
Sharif Colorpen 2
Sakib Eraser 1
Sharif Sharpner 1

我根据建议编辑了我的脚本,现在内容如下:

#!/bin/bash

# gives summary of my buyings in the report.txt file

echo Here is the summary of your purchases:
echo =========================================

# /dev/stdin is the standard input, i.e. the file
cat /dev/stdin | cut -d ' ' --fields=2,3 | sort | sed -n '2 p'

我运行我的脚本,因为我的脚本文件名在cat report.txt | ./summary哪里。summary现在输出是Books 5.

除了打印第二个和第三个字段之外,我还想打印report.txt的第二行,即输出应如下所示:

Books 5
Colorpen 2
Eraser 1
Khata 3
Pen 12
Sharpner 1
Sharif Sharpner 1

答案1

当您链接sed命令时,&&您告诉 shell 单独运行该命令。留下cat ... cut ... sort输出然后打印第二行,没有任何剪切。

如果您只想打印输入的第二行(已排序),请将其更改为:

cut -d ' ' --fields=2,3 | sort | sed -n 2p

无需重复 /dev/stdin,因为当您不提供输入文件时,两者都会读取 stdin cutsed


要从文件中打印第二个和第三个空格分隔字段,以及打印整个第二行,您可以在 sed 中完成这一切:

sed -e 2p -e 's/^[^ ]* //' < report.txt | sort

这告诉 sed 二执行两个程序:

  • p打印线 2,以及
  • s搜索并替换:从行的开头开始,零个或多个非空格字符,后跟一个空格... with:(无)

当运行更新的示例输入时,我得到:

Books 5
Colorpen 2
Eraser 1
Khata 3
Pen 12
Sakib Khata 3
Sharpner 1

...因为Sakib Khata 3是文件的第二行。

答案2

/dev/stdin读取变量 的内容:

content=$(cat)
echo "$content" | cut -d ' ' --fields=2,3 | sort
echo "$content" | sed -n '2p'

cat默认从 读取stdin

例子:

(
  content=$(cat);
  echo "$content" | cut -d ' ' --fields=2,3 | sort;
  echo "$content" | sed -n '2p'
) < <(echo -e "a b c\nd e f\ng h i\n")


b c
e f
h i
d e f

更新:

您编辑的问题的示例

echo 'Jakaria Books 5
Sakib Khata 3
Afzal Pen 12
Sharif Colorpen 2
Sakib Eraser 1
Sharif Sharpner 1' | (
    content=$(cat);
    echo "$content" | cut -d ' ' --fields=2,3 | sort;
    echo "$content" | sed -n '2p'
)

Books 5
Colorpen 2
Eraser 1
Khata 3
Pen 12
Sharpner 1
Sakib Khata 3

相关内容