粘贴命令不是一对一的

粘贴命令不是一对一的

我有一个名为phone_dir.txt的文件(例如2行):

ADAMS, Andrew 7583
BARRETT, Bruce 6466

我尝试提取姓氏并将其大写,所需的输出是:

Adams
Barret

我只能使用以下命令:

  • 粘贴
  • t

我尝试运行以下脚本,但结果不一致:

cut -c1 phone_dir.txt > last_names.txt | cut -f1 -d',' phone_dir.txt | cut -c2- | tr A-Z a-z | paste last_names.txt - | tr -d [:blank:]

有时输出是:

Adams
Barret

有时

dams
arret

为什么结果不一致?

答案1

如果允许您创建临时文件,怎么样?

in=phone_dir.txt
out=last_names.txt
tmp=$$tmp && \
a=$(cut -d',' -f1 "$in" | tee >(cut -c2- | tr [:upper:] [:lower:] > "$tmp") | cut -c1) && \
paste  <(printf "%s\n" ${a[@]}) "$tmp" | tr -d [:blank:] > "$out" && \
rm "$tmp"

相关内容