【问题标题】:Making a script in debian which would create a new file from names file with different order of the names在 debian 中创建一个脚本,该脚本将从名称文件中创建一个具有不同名称顺序的新文件
【发布时间】:2020-10-05 07:25:15
【问题描述】:

“names”文件中的现有名称是 lastname1,firstname1 的形式;姓2,名字2。

在新文件中应该如下所示。

创建一个脚本,以以下形式输出现有用户列表(来自“名称”文件):

firstname1.lastname1
firstname2.lastname2
etc.

并保存一个名为“cat list”的文件

【问题讨论】:

  • 你不应该使用像sed这样的流编辑器吗?您应该能够使用正则表达式捕获来反转姓/名顺序并应用进一步的过滤器,例如替换 ';'带换行符。

标签: shell debian


【解决方案1】:

这种命令行应该是你的解决方案:

 awk -F '\.' '{print $2","$1}' source_file >> "cat list"
  • 首先 awk 颠倒字段的顺序并将字符“,”放在
  • ">>" 第二步将完整输出重定向到一个名为“cat list”的文件中

【讨论】:

  • 我也考虑过使用awk。它可能比使用trsed 更好。您发布的示例将有效地用逗号替换句点并反转名称字段。但是,它不会删除分号,问题作者实际上想要句点!
【解决方案2】:

我认为我在这里没有最有效的解决方案,但它可以工作并输出不同的翻译阶段以帮助说明流程:

#!/bin/sh

echo "lastname1,firstname1 ; lastname2,firstname2" >testfile
echo "original file:"
cat testfile
echo "\n"

# first replace semi-colon with newline
tr ';' '\n' <testfile >testfile_n
echo "after first translation:"
cat testfile_n
echo "\n"

# also remove extra spaces
tr -d '[:blank:]' <testfile_n >testfile_n_s
echo "after second translation:"
cat testfile_n_s
echo "\n"

# now swap name order using sed and use periods instead of commas
sed -E 's/([a-zA-Z0-9]*),([a-zA-Z0-9]*)/\2\.\1/g' testfile_n_s >"cat list"
echo "after third iteration:"
cat "cat list"
echo "\n"

上面的脚本将保存一个名为“cat list”的文件,并输出类似于:

original file:
lastname1,firstname1 ; lastname2,firstname2


after first translation:
lastname1,firstname1
 lastname2,firstname2


after second translation:
lastname1,firstname1
lastname2,firstname2


after third iteration:
firstname1.lastname1
firstname2.lastname2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-28
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多