⭐️ LeetCode解题系列 ⭐️ 194. 转置文件(Shell)

@TOC

❤️ 原题 ❤️

给定一个文件 file.txt,转置它的内容。

你可以假设每行列数相同,并且每个字段由 ' ' 分隔。

示例:

假设 file.txt 文件内容如下:

复制代码
name age
alice 21
ryan 30

应当输出:

复制代码
name alice ryan
age 21 30

☀️ 解题思路 ☀️

分析

文件内容为2行3列,每行列数相同,字段由 ' ' 分隔,需要将第一列转为第一行,第二列转为第二行。

xargs 多行变单行

很容易就想到了 xargs 这个命令,可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。

举例:

bash 复制代码
cat <<EOF>1.txt
1
2
3
EOF
cat 1.txt | xargs

但是有个问题,如果有多列的情况下,输出只能按次序只能变成单行。也就是如下: 无法达到需要的效果。所以得想办法依次取到每一列然后执行 xargs 输出。如何取到第一列的数据呢?

awk + print 打印列

可以使用 awk 命令处理文本,配置 print 命令来获取指定列的数据:

bash 复制代码
awk '{print $1}' 1.txt

这样就达到了我们的要求,接下来只需要获取文本有多少列,然后循环输出即可。

head + wc 获取列数

通过 head -n 命令可以获取文件指定行数的内容,再使用 wc -w 即可获取当前行的所有列数。由于本题每行列数相同,因此我们取第一行即可。

bash 复制代码
cat 1.txt | head -n 1 | wc -w

获取每行的总列数为2列。接下来再写个循环来输出:

bash 复制代码
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 基础命令:awkheadxargswcprint,需要熟练掌握使用。


本次分享到此结束啦~

如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。


📚 推荐阅读:DBA 学习之路

如果这篇文章对你有帮助,推荐访问我的 Oracle DBA 系统学习站点,涵盖 100 天完整学习路线:

  • 🔧 Oracle 安装部署 · RMAN 备份恢复 · Data Pump 数据迁移
  • 🏗️ RAC 高可用 · DataGuard 容灾 · 多租户架构
  • 🔍 故障排查 · 升级迁移 · GoldenGate 数据同步

👉 立即访问 ora100.com →

相关推荐
JaguarJack1 小时前
Whim 是什么?一门把 PHP 被否决的设想真跑起来的实验语言
后端·php·服务端
明月_清风1 小时前
MHS:AI Agent 开始连接物理世界
人工智能·后端·网络协议
ssshooter1 小时前
Node.js 天生就是异步的,为什么还要消息队列?
javascript·后端·面试
福兮说1 小时前
Gin 项目里的错误处理:让 Controller 不必知道错误是怎么来的
后端·go·gin·架构设计
n8n2 小时前
Spring AI Alibaba Graph 实战:用图编排复杂业务,替代硬编码,支持分支、并行与人工确认
后端
Lyy2 小时前
DevOps平台 — 第十一篇:工作项的设计与实现
后端·devops
用户526835677902 小时前
Alertmanager 的告警怎么“喊“出来:Webhook 到声光语音终端的路由与抑制设计
后端
衝鋒壹号2 小时前
鸿蒙 PC 能跑 Docker 吗?一次从安装失败到成功运行的实测记录
后端·harmonyos
用户8181870627462 小时前
第27章 消息丢失/重复消费的全链路排查(生产者→Broker→消费者)
java·后端
程序员cxuan2 小时前
ChatGPT 开启无限 token
人工智能·后端·程序员