⭐️ LeetCode解题系列 ⭐️ 194. 转置文件(Shell)
Posted Lucifer三思而后行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了⭐️ LeetCode解题系列 ⭐️ 194. 转置文件(Shell)相关的知识,希望对你有一定的参考价值。
❤️ 原题 ❤️
给定一个文件 file.txt
,转置它的内容。
你可以假设每行列数相同,并且每个字段由 ' '
分隔。
示例:
假设 file.txt
文件内容如下:
name age
alice 21
ryan 30
应当输出:
name alice ryan
age 21 30
☀️ 解题思路 ☀️
分析
文件内容为2行3列,每行列数相同,字段由 ' '
分隔,需要将第一列转为第一行,第二列转为第二行。
xargs 多行变单行
很容易就想到了 xargs
这个命令,可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
举例:
cat <<EOF>1.txt
1
2
3
EOF
cat 1.txt | xargs
但是有个问题,如果有多列的情况下,输出只能按次序只能变成单行。也就是如下:
无法达到需要的效果。所以得想办法依次取到每一列然后执行 xargs
输出。如何取到第一列的数据呢?
awk + print 打印列
可以使用 awk
命令处理文本,配置 print
命令来获取指定列的数据:
awk '{print $1}' 1.txt
这样就达到了我们的要求,接下来只需要获取文本有多少列,然后循环输出即可。
head + wc 获取列数
通过 head -n
命令可以获取文件指定行数的内容,再使用 wc -w
即可获取当前行的所有列数。由于本题每行列数相同,因此我们取第一行即可。
cat 1.txt | head -n 1 | wc -w
获取每行的总列数为2列。接下来再写个循环来输出:
columns=$(cat 1.txt | head -n 1 | wc -w)
for i in $(seq 1 $columns)
do
awk '{print $'''$i'''}' 1.txt | xargs
done
至此,已经成功解题,达到了所需结果。将文中的 1.txt
换成 file.txt
,去 LeetCode 执行一下看看结果吧:
❄️ 写在最后 ❄️
本题主要用到一些 Linux 基础命令:awk
、head
、xargs
、wc
、print
,需要熟练掌握使用。
本次分享到此结束啦~
如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。
以上是关于⭐️ LeetCode解题系列 ⭐️ 194. 转置文件(Shell)的主要内容,如果未能解决你的问题,请参考以下文章
⭐️ LeetCode解题系列 ⭐️ 175. 组合两个表(Oracle 简单的左右连接)
⭐️ LeetCode解题系列 ⭐️ 175. 组合两个表(Oracle 简单的左右连接)
⭐️ LeetCode解题系列 ⭐️ 192. 统计词频(Shell)
⭐️ LeetCode解题系列 ⭐️ 192. 统计词频(Shell)