gpt4 book ai didi

bash - 在 BASH 中分两列输出一个文件

转载 作者:行者123 更新时间:2023-12-04 00:25:35 25 4
gpt4 key购买 nike

我想在第 n 行之后将文件重新排列成两列。

例如,假设我这里有一个这样的文件:

This is a bunchof textthat I'd like to printas twocolumns startingat line number 7and separated by four spaces.Here are somemore lines so I candemonstratewhat I'm talking about.

我想像这样打印出来:

This is a bunch           and separated by four spaces.of text                   Here are somethat I'd like to print    more lines so I canas two                    demonstratecolumns starting          what I'm talking about.at line number 7

我如何使用 bash 命令或函数来做到这一点?

最佳答案

实际上,pr 几乎可以做到这一点:

pr --output-tabs=' 1' -2 -t tmp1 

This is a bunch                     and separated by four spaces.
of text Here are some
that I'd like to print more lines so I can
as two demonstrate
columns starting what I'm talking about.
at line number 7

-2 两列; -t 省略页眉;如果没有 --output-tabs=' 1',它会为它添加的每 8 个空格插入一个制表符。您还可以设置页面宽度和长度(如果您的实际文件长于 100 行);查看 man pr 以获得一些选项。

如果您确定“比左边最长的一行多四个空格”,那么您可能需要使用更复杂的东西;

以下内容适用于您的测试输入,但已到达正确答案应该是“已经使用 Perl;”的地步;

#!/bin/sh
infile=${1:-tmp1}
longest=$(longest=0;
head -n $(( $( wc -l $infile | cut -d ' ' -f 1 ) / 2 )) $infile | \
while read line
do
current="$( echo $line | wc -c | cut -d ' ' -f 1 )"
if [ $current -gt $longest ]
then
echo $current
longest=$current
fi
done | tail -n 1 )
pr -t -2 -w$(( $longest * 2 + 6 )) --output-tabs=' 1' $infile

This is a bunch           and separated by four spa
of text Here are some
that I'd like to print more lines so I can
as two demonstrate
columns starting what I'm talking about.
at line number 7

... 重新阅读您的问题,我想知道您的意思是不是要从字面上指定程序的第 nth 行,在这种情况下,除非该行发生,否则以上都不会起作用半途而废。

关于bash - 在 BASH 中分两列输出一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30744258/

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