我从一个程序中获取输出,该程序首先生成一行,即一堆列标题,然后是一堆数据行。我想剪切此输出的各个列并查看它根据各个列排序。在没有标题的情况下,通过-k选择与列sort一起cut或awk查看列的子集,可以轻松完成剪切和排序。但是,这种排序方法将列标题与输出的其余行混合在一起。有没有一种简单的方法可以将标题保持在顶部?
我有两个文本文件。第一个有内容:
Languages
Recursively enumerable
Regular
Run Code Online (Sandbox Code Playgroud)
而第二个有内容:
Minimal automaton
Turing machine
Finite
Run Code Online (Sandbox Code Playgroud)
我想将它们按列合并到一个文件中。所以我试过了paste 1 2,它的输出是:
Languages Minimal automaton
Recursively enumerable Turing machine
Regular Finite
Run Code Online (Sandbox Code Playgroud)
但是我想让列对齐良好,例如
Languages Minimal automaton
Recursively enumerable Turing machine
Regular Finite
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以在不手动处理的情况下实现这一目标?
添加:
这是另一个例子,布鲁斯方法几乎可以解决它,除了一些轻微的错位,我想知道为什么?
$ cat 1
Chomsky hierarchy
Type-0
—
$ cat 2
Grammars
Unrestricted
$ paste 1 2 | pr -t -e20
Chomsky hierarchy Grammars
Type-0 Unrestricted
— (no common name)
Run Code Online (Sandbox Code Playgroud) 在我的 PC 上,我必须遵循路由表:
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
Run Code Online (Sandbox Code Playgroud)
我不明白它是如何分析的,我的意思是自上而下还是自下而上?
如果从上到下进行分析,那么即使 IP 目的地是 192.168.1.15,所有内容也将始终发送到我家中的路由器;但是我知道(错误地?)是,如果 PC 在我的同一个本地网络中,那么一旦我通过广播消息恢复了 MAC 目的地,那么我的 PC 可以直接将消息发送到目的地。
我正在为表格的标题着色 column -ts $'\t'
在没有颜色代码的情况下效果很好,但是当我将颜色代码添加到第一行时column,输出无法正确对齐。
没有彩色输出它按预期工作:
printf "1\t2\t3\nasdasdasdasdasdasdasd\tqwe\tqweqwe\n" | column -ts $'\t'
但是在第一行列上添加颜色时,不会与彩色行的文本对齐:
printf "\e[7m1\t2\t3\e[0m\nasdasdasdasdasdasdasd\tqwe\tqweqwe\n" | column -ts $'\t'
在 Ubuntu Linux 和 Mac OS X 上都观察到了这种行为。
是否有一种简单的方法可以将逗号分隔的文本行拆分为某些列右对齐的列?
作为奖励,格式化数字会很好,但这对于 sed 来说可能并不太难。
可能的重复:
不同进程中的相同 fd 如何指向同一个文件?
我很难掌握File Descriptor Table和Open File Table这两个概念。
打开文件表是内核中的一个表,其中包含系统中所有打开的文件,我理解这一点。但是我不明白与文件描述符的联系。

如果文件描述符确实是文件的索引,那么为什么两个不同进程中的文件描述符 4 指向两个完全不同的文件(即文件 A 和文件 B)?我们如何在打开文件表中有两次文件 A ?每个文件不应该只呈现一次吗?
我使用column -t格式化数据以便于在 shell 中查看,但似乎没有指定列对齐的选项(例如向右对齐)。
有 Bash 俏皮话可以做到这一点吗?我有任意数量的列。
我需要对 CSV 文件进行排序,但标题行(第一行)一直在排序。这是我正在使用的:
cat data1.csv | sort -t"|" -k 1 -o data1.csv
Run Code Online (Sandbox Code Playgroud)
这是一个示例行:
Name|Email|Country|Company|Phone
Brent Trujillo|tempus@mauris.org|Burkina Faso|Donec LLC|(612) 943-0167
Run Code Online (Sandbox Code Playgroud) 我对 bash 很陌生,我正在尝试通过创建一些小脚本来学习它。
我创建了一个小脚本来同时查找多个域的 DNS 条目。域作为属性给出。
COUNTER=0
DOMAINS=()
for domain in "$@"
do
WOUT_WWW=$(dig "$domain" +short)
if (( $(grep -c . <<<"$WOUT_WWW") > 1 )); then WOUT_WWW="${WOUT_WWW##*$'\n'}" ; fi
WITH_WWW=$(dig "www.${domain}" +short)
if (( $(grep -c . <<<"$WITH_WWW") > 1 )); then WITH_WWW="${WITH_WWW##*$'\n'}" ; fi
DOMAINS[$COUNTER]="$domain|$WOUT_WWW|$WITH_WWW"
COUNTER=$(($COUNTER+1))
done
Run Code Online (Sandbox Code Playgroud)
现在我只想遍历新的“多维”数组并给出像 mysql 表这样的输出:
+------------------------------+
| Row 1 | Row 2 | Row 3 |
+------------------------------+
| Value | Value | Value |
+------------------------------+
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
所以我不想要这个:
echo "9"
9
Run Code Online (Sandbox Code Playgroud)
相反,我需要这个,例如:在它之前有 4 个空格:
MAGICK "9"
9
Run Code Online (Sandbox Code Playgroud)
所以如果我用 10 试试:
MAGICK "10"
10
Run Code Online (Sandbox Code Playgroud)
那么它前面只有3个空格。如何以这种方式格式化我的输出?
table ×10
sort ×2
bash ×1
colors ×1
columns ×1
csv ×1
echo ×1
linux ×1
networking ×1
open-files ×1
output ×1
route ×1
shell-script ×1
utilities ×1