linux - 连接 echo 的结果和命令输出

标签 linux bash printing printf echo

我有以下代码:

names=$(ls *$1*.txt) 
head -q -n 1 $names | cut -d "_" -f 2

其中第一行查找所有与命令行输入匹配的名称并将其存储到名为 names 的变量中,第二行获取每个文件中的第一行(变量名称的元素)并输出该行的第二部分基于“_”delim。

一切都很好,但是我想将文件名(存储为变量名中的行)添加到 cut 的输出中。我试过:

names=$(ls *$1*.txt) 
head -q -n 1 $names | echo -n "$names" cut -d "_" -f 2

但是这只会打印出文件名

我试过了

names=$(ls *$1*.txt 
head -q -n 1 $names | echo -n "$names"; cut -d "_" -f 2

我再次只打印出文件名。

期望的输出是:

$
filename1.txt <second character>

文件名和剪切结果之间有一个空格。

谢谢。

最佳答案

最佳方法,使用 awk

您可以一次调用 awk 来完成所有这些:

awk -F_ 'NR==1{print FILENAME, $2; exit}' *"$1"*.txt

在第一个文件的第一行,打印文件名和第二列的值,然后退出。


纯 bash 解决方案

我总是建议不要解析 ls - 相反我会使用循环:

您可以通过使用 bash 内置功能避免使用 awk 读取文件的第一行:

for i in *"$1"*.txt; do
    IFS=_ read -ra arr <"$i"
    echo "$i ${arr[1]}"
    break
done

这里我们将文件的第一行读取到一个数组中,在 _ 上将其拆分成多个部分。

关于linux - 连接 echo 的结果和命令输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29299046/

相关文章:

python - python 子进程模块古怪吗?

linux - 如何在Linux shell脚本中做这样的事情

linux - 我怎样才能将它组合成一个单行 - bash

python - 尝试指定命令行参数但无法弄清楚 - 不完全确定 'dest' 和 'store' 在 optparse 中做什么

Windows 中的代码未更新

c - 为什么这个 C 程序不打印任何内容?

linux - 为什么 ls 和 ls -l linux 命令之间的计数不同?

linux - 如何清理 bash 中分隔符也在双引号内的 csv?

printing - 如何正确测量打印尺寸和与网络的距离?

java - 使用 javax 和 pdfbox 的静默打印机应用程序