awk 如何获取每行最后一个字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk 如何获取每行最后一个字符相关的知识,希望对你有一定的参考价值。

1、新建一个html文件,命名为test.html。

2、在test.html文件内,在p标签内,使用input标签创建一个字符串输入框。

3、在test.html文件内,设置input元素的id为myinput,主要用于下面通过该id获得input对象。

4、在test.html文件内,使用button标签创建一个按钮,按钮名称为“获取字符串最后一个字符”。

5、在test.html文件中,给button按钮绑定onclick点击事件,当按钮被点击时,执行getlast()函数。

6、在js标签中,创建getlast()函数,在函数内,通过getElementById()方法获得input对象,使用value属性获得输入框输入的字符串,再使用charAt()方法获得字符串倒数第一个字符(length属性用于获得字符串的长度)。

7、在浏览器打开test.html文件,点击按钮,查看结果。

参考技术A 楼上诸位好复杂.....
awk -F '' 'print $NF' inputfile 完事...-F 后面是空格+两个单引号
更新下....
awk -F '' '$0=$NF' inputfile
参考技术B awk 'n=split($0,a,"");print a[n]' filename

 或者:

awk 'print substr($0,length())' filename

本回答被提问者和网友采纳
参考技术C awk 'print substr($0,length($0))'

如何获取每行中的字符数?

【中文标题】如何获取每行中的字符数?【英文标题】:How do I get number of characters in each line? 【发布时间】:2019-05-23 21:38:01 【问题描述】:

我需要获取每行中的字符数,然后将其粘贴到另一个文件(学校项目)中,但即使我的原型已经无法工作。

当我将它粘贴到另一个文件时,我已经尝试继续查看问题是否自行解决,但它没有工作,所以我回到了这个。

int main()

    FILE *fw;
    FILE *fr;
    int i = 0;
    char c;
    fr = fopen("vstup.txt","r");
    fw = fopen("vystup.txt","w");
    while ((c = getc(fr)) != EOF)
    
        while ((c = getc(fr)) != '\n')
        
            i++;
        
        printf("%d\n", i);
    

【问题讨论】:

究竟是什么不适合您?顺便说一句,您正在跳过每行中的第一个字符。 你没有把计数器归零... char c 应该是int c 也许看看this post 和 cmets 中的链接。 Comparing unsigned char and EOF的可能重复 【参考方案1】:

c 必须声明为 int,而不是 charEOF 可能不是有效的 char 值,因此不等式可能永远存在。

您不应两次致电getc()。您永远不会检查第一次调用的结果是否是换行符。

您需要在读取换行符后将i 设置回0,否则您将继续将下一行的长度添加到上一行。

您应该只在读取换行符时打印长度,而不是每次通过循环。如果最后一行不以换行符结尾,则应在循环后打印其长度;如果完成后i 不是0,您就可以知道发生了这种情况。

由于长度应该写入另一个文件,你应该使用fprintf()

while ((c=getc(fr)) != EOF) 
    if (c == '\n') 
        printf("%d\n", i);
        i = 0;
     else 
        i++;
    

if (i != 0) 
    fprintf(fw, "%d\n", i);

【讨论】:

【参考方案2】:

您不需要嵌套循环。无论哪种方式,您都需要将计数器归零,因此您不妨只使用if 而不是一段时间:

int main()

    FILE *fw, *fr;
    int count = 0;
    int c;

    fr = fopen("vstup.txt","r");
    fw = fopen("vystup.txt","w");

    while ((c = getc(fr)) != EOF) 
        count++;
        if(c == '\n') 
            fprintf(fw, "%d\n", count);
            count = 0;
        
    

    fclose(fr);
    fclose(fw);

此版本会将换行符视为有效字符。

注意c 必须是int,而不是char,这样它就可以保存getcEOF 返回的每个字符值,这不是字符值。

别忘了关闭你的文件!

【讨论】:

@Eric。那确实好多了,所以我无耻地窃取了你的建议。 不是偷的;它是免费提供的。教别人改进答案比我自己写所有东西做得更多。 @Eric。谢谢你。大多数时候我都有同样的感觉。

以上是关于awk 如何获取每行最后一个字符的主要内容,如果未能解决你的问题,请参考以下文章

如何获取日志字符串的最后一部分并将其解释为 json?

如何获取每行中的字符数?

linux之awk命令获取最后一列

在awk“if”语句中的最后一个下划线后获取字符

linux之awk命令获取最后一列

如何使用awk从后向前来截取字符串?